Mybatis游标查询Cursor(滚动查询) |
您所在的位置:网站首页 › tidb mybatis分页查询 › Mybatis游标查询Cursor(滚动查询) |
需求是实现滚动查询而不是分页,用游标查询实现此需求 总体思路:滚动查询,往下拉滚动条触发请求,返回数据并带当前下标,以备下次请求继续往下查询 ①首先在dao层mapper文件中写查询方法(下面的示例带有查询条件) // 策略为向下滚动 @Options(resultSetType = ResultSetType.FORWARD_ONLY) @Select({"select * from task where status!=#{status} order by create_time desc"}) Cursor getTasksStatistic(Integer status);②在service层写方法并在serviceimpl中实现 // TaskCursorVo是封装类 TaskCursorVo getTaskStatus(Integer currentIndex, Integer pageSize); public TaskCursorVo getTaskStatus(Integer currentIndex,Integer pageSize) { TaskCursorVo taskCursorVo=new TaskCursorVo(); List collect=new ArrayList(); // 第一个参数为方法名,第二个参数是查询条件的值(如果没有查询条件就写null),第三个条件是从下标为currentIndex的开始查pageSize条数据 Cursor tasksStatistic = sqlSessionTemplate.selectCursor("getTasksStatistic",DELETED.getCode(),new RowBounds(currentIndex,pageSize)); // 对结果进行遍历封装 Iterator iterator = tasksStatistic.iterator(); while (iterator.hasNext()) { Task task = iterator.next(); TaskStatusVo taskStatusVo = new TaskStatusVo(); BeanUtils.copyProperties(task, taskStatusVo); taskStatusVo.setStatusName(Objects.requireNonNull(getByCode(task.getStatus())).getDesc()); collect.add(taskStatusVo); } taskCursorVo.setTaskStatusVos(collect); // 需要把当前下标返回给前端 taskCursorVo.setCurrentIndex(tasksStatistic.getCurrentIndex()); Example e=new Example(Task.class); Example.Criteria c = e.createCriteria().andNotEqualTo("status", DELETED.getCode()); List tasks = taskMapper.selectByExample(e); // 把总条数查出来给前端 taskCursorVo.setTotalSize(tasks.size()); return taskCursorVo; }③controller实现 @GetMapping("/taskStatus") public ResultModel taskStatus(@RequestParam(defaultValue = "0") Integer currentIndex,@RequestParam(defaultValue = "20") Integer pageSize){ // 第一次默认从第0条开始查询20条,往后的前端会把上次请求返回的当前下表传过来 // 如果不是从第一次查询,就要从上次查询当前下标的下一条数据开始查询 if (currentIndex!=0){ currentIndex+=1; } TaskCursorVo taskCursorVo = taskService.getTaskStatus(currentIndex, pageSize); return ResultModel.success(taskCursorVo); } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |